import unittest, setup_common, requests,csv

class StockTest(unittest.TestCase):
    def setUp(self) -> None:
        self.ip = setup_common.get_shared_ip()
        #self.header = setup_common.get_shared_headers()
        self.header = setup_common.get_shared_headers()
        self.stockurl = setup_common.generate_url(self.ip, "binset")
        self.stock_results = []  # 用于收集固定资产列表
        self.stock_list = []  # 初始化一个空列表用于存储所有库位数据，写入 stock_list.csv
        self.json_output = []  # 用于存储 test_get_capital 方法输出的 JSON 输出数据


    def test_get_stock(self):
        # 测试逻辑-获取库位列表
        page = 1
        while True:
            response = requests.get(url=self.stockurl, headers=self.header, params={"page": page}).json()
            results = response.get("results", [])
            if not results:  # 添加退出条件，当结果为空时退出循环
                break
            output_list = []
            for result in results:
                output_dict = {
                    'id': result['id'],
                    'bin_name': result['bin_name'],
                    'bin_size': result['bin_size'],
                    'bin_property': result['bin_property'],
                }
                output_list.append(output_dict)
            self.json_output.extend(output_list)
            page += 1

        self.stock_list = self.json_output

    def tearDown(self) -> None:
        # 测试逻辑-将生成的stock_list写入一个新的csv文件，命名为stock_list.csv
        # 测试逻辑-生成的capital_list将作为测试用例的输出
        csv_filename = "stock_list.csv"
        with open(csv_filename, mode='w', newline='', encoding='utf-8') as file:
            fieldnames = ['id', 'bin_name', 'bin_size', 'bin_property']
            writer = csv.DictWriter(file, fieldnames=fieldnames)
            writer.writeheader()
            writer.writerows(self.stock_list)
            print(f"CSV 文件已生成：{csv_filename}")
            # 测试逻辑-断言csv文件中的id是否属于self.json_output中的id
            for row in self.stock_list:
                row_id = row['id']
                if row_id not in [item['id'] for item in self.json_output]:
                    raise AssertionError(f"ID '{row_id}' 未在 self.json_output 中找到，测试失败")
                else:
                    print(f"测试通过：CSV 文件中的 ID 值 {row_id} 均在 self.json_output 中找到")